

import router from "@/router/index.js";
import {layoutRoute} from "@/router/index.js";

import {USER_INFO} from '@/store/userStore';

import {httpPost} from "@/api";
import {ls} from 'qlrz-service'
import staticMenus from "./menus.js";


// 格式化静态资源导航菜单数据，添加name
// ---------未使用了
function formatStatic (menus) {
	menus = [...layoutRoute, ...menus];
	ergodic(menus);
	return menus;

	// 遍历
	function ergodic(arr) {
		for (let i = 0; i < arr.length; i++) {
			let item = arr[i];
			// 如果是组件页面。添加组件名
			if (item.component) {
				item.name = item.component.replace(/\//g, '_');
			}
			if(item.children) {
				ergodic(item.children);
			}
		}
	}
}

// 格式化动态接口导航菜单数据
// 并过滤未激活菜单
function formatApi(menus) {
	let newMenus = recurrence(menus);
	let res = [...newMenus, ...layoutRoute];
	return res;

	// 递归
	function recurrence(arr) {
		let res = [];
		for (let i = 0; i < arr.length; i++) {
			let item = arr[i];
			let obj = {};
			// 菜单类型 - 1菜单，2操作
			obj.menu_type = item.menu_type || 1;
			// 链接
			if(item.menu_url) {
				obj.path = item.menu_url;
			}
			// 组件
			if(item.menu_component) {
				obj.component = item.menu_component;
				// 如果是组件页面。添加组件名
				obj.name = item.menu_component.replace(/\//g, '_');
			}
			// 组件名
			if(item.menu_name) {
				obj.title = item.menu_name;
			}
			// meta
			obj.meta = {
				// 排序
				order: item.order_field,
				// 系统类型 1外部 0内部
				is_out: 'is_out' in item ? item.is_out : '0',
				// 是否缓存 1是 2否
				is_cache: 'is_cache' in item ? item.is_cache : '0',
				// 打开新窗口 1是 0否
				target: 'is_new' in item ? item.is_new : '0',
				// 显式菜单 1是 0否
				is_show: 'is_show' in item ? item.is_show : '1',
				// 是否激活 1是 0否
				is_activation: 'is_activation' in item ? item.is_activation : '1',
			}
			if(item.child) {
				obj.children = recurrence(item.child);
			}
			// 激活的菜单添加
			if(obj.meta.is_activation == 1) {
				res.push(obj);
			}
		}
		return res;
	}
}


// 添加导航菜单动态路由
const modules = import.meta.glob("../views/**/*.vue");
function addLayoutRoutes (menus) {
	// 原始菜单
	const originList = [];
	// layout子菜单
	const layoutChildren = [];

	ergodic(menus);
	// 主框架
	var oLayout = {
    path: '/layout',
    name: 'layout',
    component: () => import('../views/layout/index.vue'),
    children: layoutChildren
  }
  // 添加权限路由
  router.addRoute(oLayout);
  originList.forEach(item => {
  	router.addRoute(item);
  })

  // 遍历
  function ergodic(list) {
  	list.forEach(item => {
  		// 如果是菜单
  		if(item.menu_type != 2) {
  			if(item.component) {
	  			if(item.component.indexOf('/l/') == 0) { // layout子菜单
	  				let obj = {
			  			path: item.path,
			  			name: item.name,
			  			component: modules[`../views${item.component.replace('/l/', '/')}.vue`],
			  		}
			  		obj.meta = item.meta || {};
			  		// 添加到layout子菜单
			  		layoutChildren.push(obj);
	  			} else { // 原始菜单
	  				let obj = {
			  			path: item.path,
			  			name: item.name,
			  			component: modules[`../views${item.component}.vue`],
			  		}
			  		obj.meta = item.meta || {};
			  		// 添加到原始菜单
			  		originList.push(obj);
	  			}
	  		}
		  	if(item.children){
		  		ergodic(item.children);
		  	}
  		}
  	})
  }
}


// 获取当前路由的宗族路由
export function getClanRoutes(menus, path) {
	let res = null;
	ergodic(menus, []);
	return res;

	// 遍历
	function ergodic(arr, parent) {
		for (let i = 0; i < arr.length; i++) {
			let item = arr[i];
			let obj = {};
			for (let key in item) {
				if(key != 'children') {
					obj[key] = item[key];
				}
			}
			let aClan = [...parent, obj];
			if (item.path == path) {
				res = aClan;
			}
			if (res) {
				break;
			}
			if(item.children) {
				ergodic(item.children, aClan);
			}
		}
	}
}

// 获取所有路由权限 - 并过滤目录
export function getAuthority() {
	let menus = ls.get('menus');
	let res = [];
	if(menus && menus.length) {
		ergodic(menus);
	}
	return res;

	// 遍历
	function ergodic(arr) {
		let handle = [];
		arr.forEach(item => {
			if (item.menu_type == 1) {
				let obj = {
					path: item.path
				}
				// 添加子菜单，并添加操作到当前菜单
				if(item.children) {
					let resHandle = ergodic(item.children);
					if(resHandle.length) {
						obj.handle = resHandle;
					}
				}
				// 添加到返回
				res.push(obj);
			} else {
				handle.push({
					title: item.title,
					path: item.path
				});
			}
		})
		return handle;
	}
}


// 初始化导航菜单
export async function initMenuRoutes () {
	// 判断是否登录
	let userInfo = ls.get(USER_INFO);
	if(!userInfo) {
		return false;
	}
	// 判断是否有缓存菜单
	let menus = ls.get('menus');
	// 调用接口获取菜单列表
	try{
		let params = {
			user_id: userInfo.userid
		}
		menus = await httpPost("userInfo/getMenuListByRole", params);
		if(!menus || !menus.length) {
			return false;
		}
		menus = formatApi(menus);
	} catch(err) {
		return false;
	}
		
	// 使用静态菜单列表
	// menus = formatStatic(staticMenus);

	// 保存菜单到localStorage
	ls.set('menus', menus);
	// 添加导航菜单动态路由
	addLayoutRoutes(menus);
	return true;
	
}







